package com.dys.teststreamapi11;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @className: com.dys.teststreamapi11.StreamAPITest
 * @description: 集合处理数据的弊端
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/09/01 下午4:39
 */
public class StreamAPITest01 {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        streamFilter();
    }

    /**
     * 集合处理数据
     */
    public static void collectionFilter() {
        // 1.定义一个List集合
        List<String> list1 = new ArrayList<>();
        list1.add("张三");
        list1.add("张三丰");
        list1.add("成龙");
        list1.add("周星驰");
        list1.add("玉莲");

        // 2.获取所有姓张的信息
        List<String> list2 = new ArrayList<>();
        for (String name : list1) {
            if (name.startsWith("张")) {
                list2.add(name);
            }
        }

        // 3.获取名称长度为3的用户
        List<String> list3 = new ArrayList<>();
        for (String name : list2) {
            if (name.length() == 3) {
                list3.add(name);
            }
        }

        // 4.输出过滤后的用户信息
        for (String name : list3) {
            System.out.println(name);
        }
    }

    /**
     * 通过Stream API 处理集合数据,获取流，过滤张，过滤长度，逐一打印。代码相比于上面的案例更加的简洁直观
     */
    public static void streamFilter() {
        // 定义一个List集合
        List<String> list = Arrays.asList("张三", "张三丰", "成龙", "周星驰");
        // 1.获取所有 姓张的信息
        // 2.获取名称长度为3的用户
        // 3.输出过滤后的用户信息
        // list.stream().filter(s->s.startsWith("张"))
        //         .filter(s->s.length()==3)
        //         .forEach(s->System.out.println(s));
        list.stream().filter(s -> s.startsWith("张"))
                .filter(s -> s.length() == 3)
                .forEach(System.out::println);
    }
}
